//
//  Persistencia.m
//  ProyectoMoviTiendas
//
//  Created by Daniel Paez on 3/6/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "Persistencia.h"
#import "CategoriaTienda.h"
#import "CategoriaProducto.h"
#import "Cliente.h"
#import "Producto.h"
#import "SubcategoriaTienda.h"
#import "SubcategoriaProducto.h"
#import "Lista.h"
#import "Carrito.h"
#import "Item.h"
#import "MoviTiendas.h"
#import "Barrio.h"


@implementation Persistencia


static NSString * path;
static NSMutableArray * productos;
static NSMutableArray * barrios;
- (id)init
{
    self = [super init];
    if (self) {
    }
    return self;
}

+ (void) crearInformacionDemoIteracion1
{


    productos = [[NSMutableArray alloc] init];
    Barrio * barrio = [[Barrio alloc] initConNombre:@"Quinta Paredes"];
    
    //Inicialización Tiendas
    Tienda * tienda1 = [[Tienda alloc] init];
    
    tienda1.nombre = @"Tienda La Avenida";
    tienda1.direccion = @"Cll 25A 40-50";
    tienda1.horaAbrir = 8;
    tienda1.horaCerrar = 20;
    //De lunes a Sabado
    tienda1.diasAbierto = 1+2+4+8+16+32;
    tienda1.descripcion = @"Aquí encontrará todos los productos que necesita.";
    tienda1.telefono = @"3212068929";
    
    
    
    Tienda * tienda2 = [[Tienda alloc] init];  
    tienda2.nombre = @"Tienda La Coruña";
    tienda2.descripcion = @"Los productos para su hogar.";
    tienda2.direccion = @"Cll 25 40-10";
    tienda2.telefono = @"3144801962";
    tienda2.horaAbrir = 10;
    tienda2.horaCerrar = 22;
    // Lunes a Domingo
    tienda2.diasAbierto = 1+2+4+8+16+32+64;
    
    
    Tienda * tienda3 = [[Tienda alloc] init];
    tienda3.nombre = @"Tienda La Plaza";
    tienda3.descripcion = @"La tienda de Salitre.";
    tienda3.direccion = @"Cll 25 69-10";
    tienda3.telefono = @"3117654321";
    tienda3.horaAbrir = 9;
    tienda3.horaCerrar = 22;
    // Lunes a Domingo
    tienda3.diasAbierto = 1+2+4+8+16+32+64;

            
    //Se crea el producto 1
    Producto * prod111 = [[Producto alloc] init];  
    prod111.nombre = @"Leche Alquería entera bolsa 900mL";
    Item * lecheAvenida = [[Item alloc] initConCantidad:-1 conPrecio:2150 conProducto:prod111 conTienda:tienda1];
    Item * lecheCor = [[Item alloc] initConCantidad:-1 conPrecio:2200 conProducto:prod111 conTienda:tienda2];
    Item * lechePla = [[Item alloc] initConCantidad:-1 conPrecio:2000 conProducto:prod111 conTienda:tienda3];
    prod111.imagen = [UIImage imageNamed:@"leche.png"];
    
    [prod111.items addObject: lecheAvenida];
    [prod111.items addObject: lecheCor]; 
    [prod111.items addObject: lechePla]; 
    [productos addObject:prod111];
    
    
    //Se crea el producto 2
    Producto * prod112 = [[Producto alloc] init];  
    prod112.nombre = @"Avena Alpina bolsa 900 mL";
    Item * avena = [[Item alloc] initConCantidad:-1 conPrecio:4700 conProducto:prod112 conTienda:tienda1];
    [prod112.items addObject:avena];    
    prod112.imagen = [UIImage imageNamed:@"avena.png"];
        [productos addObject:prod112];
    
    //Se crea el producto Chocoramo Tajada
    Producto * prod121 = [[Producto alloc] init];  
    prod121.nombre = @"Ponqué Chocoramo tajada";
    Item * chocoramo = [[Item alloc] initConCantidad:-1 conPrecio:800 conProducto:prod121 conTienda:tienda1];
    [prod121.items addObject: chocoramo];
    prod121.imagen = [UIImage imageNamed:@"chocoramo.png"];
    [productos addObject:prod121];
    
    //Se crea el producto Head & Shoulders
    Producto * prod211 = [[Producto alloc] init];  
    prod211.nombre = @"Shampoo Head & Shoulders limpieza renovadora";
    Item * shampoo = [[Item alloc] initConCantidad:-1 conPrecio:8000 conProducto:prod211 conTienda:tienda2];
    Item * shampooPla = [[Item alloc] initConCantidad:-1 conPrecio:8200 conProducto:prod211 conTienda:tienda3];
    [prod211.items addObject: shampoo]; 
    [prod211.items addObject: shampooPla]; 
    prod211.imagen = [UIImage imageNamed:@"shampoo.png"];
    [productos addObject:prod211];
    
    
    //Se crea el producto jabón Dove
    Producto * prod221 = [[Producto alloc] init];  
    prod221.nombre = @"Jabón Dove Blanco";
    Item * dove = [[Item alloc] initConCantidad:-1 conPrecio:2250 conProducto:prod221 conTienda:tienda2];
    Item * dovePla = [[Item alloc] initConCantidad:-1 conPrecio:2000 conProducto:prod221 conTienda:tienda3];
    [prod221.items addObject: dove]; 
    [prod221.items addObject: dovePla]; 
    prod221.imagen = [UIImage imageNamed:@"jabon dove.png"];
    [productos addObject:prod221];
    
    //Se crea el producto Protex
    Producto * prod222 = [[Producto alloc] init];  
    prod222.nombre = @"Jabón Protex Aloe";
    Item * protex = [[Item alloc] initConCantidad:-1 conPrecio:2000 conProducto:prod222 conTienda:tienda2];
    [prod222.items addObject: protex];   
    prod222.imagen = [UIImage imageNamed:@"jabon protex.png"];
        [productos addObject:prod222];
    
    //Subcategorias de la avenida
    SubcategoriaTienda * lactAvenida = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:lecheAvenida, avena, nil]];
    lactAvenida.nombre = @"Lácteos";
    SubcategoriaTienda * paAvenida = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:chocoramo, nil]];
    paAvenida.nombre = @"Paquetes";
    
    
    //Crea la categoria de la tienda
    CategoriaTienda * alimAvenida = [[CategoriaTienda alloc] init];
    alimAvenida.nombre = @"Alimentos";
    alimAvenida.subcategorias = [[NSMutableArray alloc] initWithObjects:lactAvenida, paAvenida, nil];
    tienda1.categorias = [[NSMutableArray alloc] initWithObjects:alimAvenida, nil];
    
  
    //Subcategorias de la coruña
    SubcategoriaTienda * lactCor = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:lecheCor, nil]];
    lactCor.nombre = @"Lácteos";
    SubcategoriaTienda * shamCor = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:shampoo, nil]];
    shamCor.nombre = @"Shampoos";
    SubcategoriaTienda * jabCor = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:dove,protex, nil]];
    jabCor.nombre = @"Jabones";
    
    
    //Crea la categoria de la coruña
    CategoriaTienda * alimCor = [[CategoriaTienda alloc] init];
    alimCor.nombre = @"Alimentos";
    
    CategoriaTienda * aseoCor = [[CategoriaTienda alloc] init];
    aseoCor.nombre =@"Aseo";
    alimCor.subcategorias = [[NSMutableArray alloc] initWithObjects:lactCor, nil];
    aseoCor.subcategorias = [[NSMutableArray alloc] initWithObjects:shamCor,jabCor, nil];
    tienda2.categorias = [[NSMutableArray alloc] initWithObjects:alimCor,aseoCor, nil];
    
    
    
    //Subcategorias de la Plaza
    SubcategoriaTienda * lactPla = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:lechePla, nil]];
    lactPla.nombre = @"Lácteos";
    SubcategoriaTienda * shamPla = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:shampooPla, nil]];
    shamPla.nombre = @"Shampoos";
    SubcategoriaTienda * jabPla = [[SubcategoriaTienda alloc] initConItems:[[NSMutableArray alloc]initWithObjects:dovePla, nil]];
    jabPla.nombre = @"Jabones";
    
    
    //Crea la categoria de la Plaza
    CategoriaTienda * alimPla = [[CategoriaTienda alloc] init];
    alimPla.nombre = @"Alimentos";
    
    CategoriaTienda * aseoPla = [[CategoriaTienda alloc] init];
    aseoPla.nombre =@"Aseo";
    alimPla.subcategorias = [[NSMutableArray alloc] initWithObjects:lactPla, nil];
    aseoPla.subcategorias = [[NSMutableArray alloc] initWithObjects:shamPla,jabPla, nil];
    tienda3.categorias = [[NSMutableArray alloc] initWithObjects:alimPla,aseoPla, nil];
    
    // Se crean los barrios
    [barrio agregarTienda:tienda1];
    [barrio agregarTienda:tienda2];
    
    Barrio * barrio2 = [[Barrio alloc] initConNombre:@"Ciudad Salitre"];

    [barrio2 agregarTienda:tienda3];
    
    barrios = [[NSMutableArray alloc] initWithObjects:barrio,barrio2, nil];
    
}

+ (NSMutableArray *) cargarProductos
{
    if (!productos)
        [Persistencia crearInformacionDemoIteracion1];
    return productos;
}
/*
+ (Cliente *) cargarCliente
{

    return [[Cliente alloc] initConNombre:@"Ario" conDireccion:@"Cll falsa 123" conBarrio:[barrios objectAtIndex:0]];
}*/


+ (NSMutableArray *) cargarBarrios
{
    if (!barrios)
        [Persistencia crearInformacionDemoIteracion1];

    return barrios;
}


+(MoviTiendas * ) cargarMoviTienda
{
    path = [NSString stringWithFormat:@"%@/Documents/dict.data", NSHomeDirectory()];
    NSFileManager * filmgr = [NSFileManager defaultManager];
    if( [filmgr fileExistsAtPath:path])
    {
        NSData *dataLoad = [NSData dataWithContentsOfFile:path];
        NSMutableDictionary * dictLoad = [NSKeyedUnarchiver unarchiveObjectWithData:dataLoad];
        
        MoviTiendas * movi = [dictLoad objectForKey:@"movi"];
        return movi;
                                          
    }
    
    return nil;
}

+ (void) guardarMoviTienda
{
  
    NSMutableDictionary *dictSave = [[NSMutableDictionary alloc] init];
    [dictSave setObject:[MoviTiendas darInstancia] forKey:@"movi"];
    NSData * dataSave = [NSKeyedArchiver archivedDataWithRootObject:dictSave];
    [dataSave writeToFile:path atomically:YES];
}

+(Cliente * ) cargarCliente
{
    path = [NSString stringWithFormat:@"%@/Documents/dict.data", NSHomeDirectory()];
    NSFileManager * filmgr = [NSFileManager defaultManager];
    if( [filmgr fileExistsAtPath:path])
    {
        NSData *dataLoad = [NSData dataWithContentsOfFile:path];
        NSMutableDictionary * dictLoad = [NSKeyedUnarchiver unarchiveObjectWithData:dataLoad];
        
        Cliente * cliente = [dictLoad objectForKey:@"cliente"];
        return cliente;
        
    }
    
    return nil;
}

+ (void) guardarCliente
{
    
    NSMutableDictionary *dictSave = [[NSMutableDictionary alloc] init];
    [dictSave setObject:[MoviTiendas darInstancia] forKey:@"cliente"];
    NSData * dataSave = [NSKeyedArchiver archivedDataWithRootObject:dictSave];
    [dataSave writeToFile:path atomically:YES];
}
@end
